了解 DAX 中父子层次结构的函数
DAX 提供了五个函数,可帮助用户管理在其模型中显示为父子层次结构的数据。 使用此函数,用户可以获取一行中所有父级的整个世系,例如,到顶端父级的世系有多少级别,谁是当前行中的第 n 级父级,谁是当前行层次结构从顶部开始的第 n 个后代,以及某些父级是当前行层次结构中的父级吗?
DAX 中的父子函数
下表包含对列的父子层次结构:EmployeeKey 和在所有函数示例中使用的 ParentEmployeeKey 。
| EmployeeKey | ParentEmployeeKey |
|---|---|
| 112 | |
| 14 | 112 |
| 3 | 14 |
| 11 | 3 |
| 13 | 3 |
| 162 | 3 |
| 117 | 162 |
| 221 | 162 |
| 81 | 162 |
在上表中,你可以看到员工 112 未定义父项,员工 112 是员工 14 的管理者 (ParentEmployeeKey),员工 14 是员工 3 的管理者,而员工 3 是员工 11、13 和 162 的管理者。 从上表可以看出,员工 112 没有任何管理者,她/他是此处所示的所有员工的最高管理者;此外,员工 3 向员工 14 报告,员工 11、13、162 向 3 报告。
下表显示了可用的函数、函数的简要说明以及对上面显示的相同数据执行函数的示例。
PATH 函数 - 返回一个带分隔符的文本,其中包含当前行从最早或最顶部开始一直持续到当前的所有父级的标识符。
| EmployeeKey | ParentEmployeeKey | 路径 |
|---|---|---|
| 112 | 112 | |
| 14 | 112 | 112|14 |
| 3 | 14 | 112|14|3 |
| 11 | 3 | 112|14|3|11 |
| 13 | 3 | 112|14|3|13 |
| 162 | 3 | 112|14|3|162 |
| 117 | 162 | 112|14|3|162|117 |
| 221 | 162 | 112|14|3|162|221 |
| 81 | 162 | 112|14|3|162|81 |
PATHLENGTH 函数 - 返回给定 PATH() 中从当前级别开始直到最早或最顶层的父级别的级别数。 在下面的示例中,列 PathLength 定义为“= PATHLENGTH([Path])”;该示例包含 Path() 示例中的所有数据,以帮助理解此函数的工作原理。
| EmployeeKey | ParentEmployeeKey | 路径 | PathLength |
|---|---|---|---|
| 112 | 112 | 1 | |
| 14 | 112 | 112|14 | 2 |
| 3 | 14 | 112|14|3 | 3 |
| 11 | 3 | 112|14|3|11 | 4 |
| 13 | 3 | 112|14|3|13 | 4 |
| 162 | 3 | 112|14|3|162 | 4 |
| 117 | 162 | 112|14|3|162|117 | 5 |
| 221 | 162 | 112|14|3|162|221 | 5 |
| 81 | 162 | 112|14|3|162|81 | 5 |
PATHITEM 函数 - 从类似 PATH() 的结果中返回指定位置处的项,从左到右计数。 在下面的示例中,列 PathItem(从左起的第 4 列)定义为“= PATHITEM([Path], 4)”;此示例使用 Path() 示例中的相同示例数据返回 Path 字符串中左起第 4 个位置的 EmployeKey。
| EmployeeKey | ParentEmployeeKey | 路径 | PathItem - 左起第 4 个 |
|---|---|---|---|
| 112 | 112 | ||
| 14 | 112 | 112|14 | |
| 3 | 14 | 112|14|3 | |
| 11 | 3 | 112|14|3|11 | 11 |
| 13 | 3 | 112|14|3|13 | 13 |
| 162 | 3 | 112|14|3|162 | 162 |
| 117 | 162 | 112|14|3|162|117 | 162 |
| 221 | 162 | 112|14|3|162|221 | 162 |
| 81 | 162 | 112|14|3|162|81 | 162 |
PATHITEMREVERSE 函数 - 从类似 PATH() 的函数结果返回某位置处的项,从右到左倒数。
在下面的示例中,列 PathItemReverse(右起的第 3 列)定义为“= PATHITEMREVERSE([Path], 3)”;此示例使用 Path() 示例中的相同示例数据返回 Path 字符串中右起第 3 个位置的 EmployeKey。
| EmployeeKey | ParentEmployeeKey | 路径 | PathItemReverse - 右起第 3 个 |
|---|---|---|---|
| 112 | 112 | ||
| 14 | 112 | 112|14 | |
| 3 | 14 | 112|14|3 | 112 |
| 11 | 3 | 112|14|3|11 | 14 |
| 13 | 3 | 112|14|3|13 | 14 |
| 162 | 3 | 112|14|3|162 | 14 |
| 117 | 162 | 112|14|3|162|117 | 3 |
| 221 | 162 | 112|14|3|162|221 | 3 |
| 81 | 162 | 112|14|3|162|81 | 3 |
PATHCONTAINS 函数 - 如果指定的路径中存在指定的项,则返回 TRUE 。 在下面的示例中,列 PathContains(员工 162)定义为“= PATHCONTAINS([Path], "162")”;如果给定路径包含员工 162,则此示例将返回 TRUE。 此示例使用上述 Path() 示例中的结果。
| EmployeeKey | ParentEmployeeKey | 路径 | PathContains - 员工 162 |
|---|---|---|---|
| 112 | 112 | FALSE | |
| 14 | 112 | 112|14 | FALSE |
| 3 | 14 | 112|14|3 | FALSE |
| 11 | 3 | 112|14|3|11 | FALSE |
| 13 | 3 | 112|14|3|13 | FALSE |
| 162 | 3 | 112|14|3|162 | TRUE |
| 117 | 162 | 112|14|3|162|117 | TRUE |